/*
    文件名称：   ctrl_smp.c
    文件作者：   中科浩电 www.bj-zkhd.com
    文件功能：   控制板和采集板通信相关内容
    修改日期：   2017-7-7
    修改内容：   修改注释
*/

#include "all.h"

extern Msg_SmpToCtrl_t Msg_SmpToCtrl = {0};

extern YesNo_t En_Update_PID = No;                      // 系统PID运算更新使能，每当接收到采集板的信息，才更新PID运算
extern YesNo_t En_SendMsgToFMU_WhenSmpUpdate = No;      // 控制板向飞控发送控制指令使能，每当处理完采集板的信息，才向飞控发送新的控制命令
extern YesNo_t En_SendDbgMsg = No;                      // 发送调试信息使能，每当处理完采集板信息，才发送调试信息
extern YesNo_t En_Update_Act = No;                      // 允许更新状态

extern Msg_CtrlToSmp_t Msg_CtrlToSmp = {0};

// 初始化控制板发送给采集板的信息
extern void Msg_Ctrl_To_Smp_Init(void)
{
    Msg_CtrlToSmp.Pkg.Seq = 0;
}
/*
    功能：接收、处理采集板发送给控制板的信息
    返回：是否正确接收到了采集板的数据包
*/
extern YesNo_t Msg_Smp_To_Ctrl_Update(void)
{
	  YesNo_t UpdateFlag;

	    UpdateFlag = No;

	    // received package from vision sample board
	    if(1 == IO_DATA_OK)
	    {
	    	IO_DATA_OK=0;
	    			uint8_t i=0;
	                for(i=0; i<sizeof(Msg_SmpToCtrl_t); i++)
	                {
	                    Msg_SmpToCtrl.Buf[i] = Ptemp->Buf[i];
	                }
	    			P24_OUT1;//接受已完成，发送方可以发送新的数据

	                UpdateFlag = Yes;
	                LED_R_IO_TOOGLE;
	     }

	        En_Update_PID = UpdateFlag;
	        En_SendMsgToFMU_WhenSmpUpdate = UpdateFlag;
	        En_SendDbgMsg = UpdateFlag;
	        En_Update_Act = UpdateFlag;
	        return UpdateFlag;
}

// 控制板向采集板发送信息
extern void Msg_Ctrl_To_Smp_Update(void)
{
	Msg_CtrlToSmp.Pkg.St = 0xAAAA;
	Msg_CtrlToSmp.Pkg.Sp = 0x5555;

	Msg_CtrlToSmp.Pkg.Alt_Sonar     = Msg_FMUToCtrl.Pkg.Alt_Sonar;          // 飞控采集到的高度

    #if(defined(ZKHD_E360_S2_FMU_VERSION) && (ZKHD_E360_S2_FMU_V2_0 == ZKHD_E360_S2_FMU_VERSION))
	Msg_CtrlToSmp.Pkg.AHRS_Rol_1000 = Msg_FMUToCtrl.Pkg.AHRS_Rol_1000;      // 飞控姿态 Roll
	Msg_CtrlToSmp.Pkg.AHRS_Pit_1000 = Msg_FMUToCtrl.Pkg.AHRS_Pit_1000;      // 飞控姿态 Pitch
	Msg_CtrlToSmp.Pkg.AHRS_Yaw_1000 = Msg_FMUToCtrl.Pkg.AHRS_Yaw_1000;      // 飞控姿态 Yaw
    #endif  // (defined(ZKHD_E360_S2_FMU_VERSION) && (ZKHD_E360_S2_FMU_V2_0 == ZKHD_E360_S2_FMU_VERSION))

	Usart_Send_Data(USART1, Msg_CtrlToSmp.Buf, sizeof(Msg_CtrlToSmp_t));   // 控制板通过串口 2 发送信息到采集板
}

